package com.example.asus.myapplication;

import android.app.Activity;
/**首先创建activity的alarmService.java,先加入所用到的包(5-6)*/
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import java.util.Calendar;

public class alarmService extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private static alarmService appRef = null;
    private Button b_call_service, b_exit_service;
    boolean k = false;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        appRef = this;
        setContentView(R.layout.main);
        b_call_service = (Button) findViewById(R.id.call_alarm_service);
        b_call_service.setOnClickListener(this);
        b_exit_service = (Button) findViewById(R.id.exit);
        b_exit_service.setOnClickListener(this);
    }

    public static alarmService getApp() {
        return appRef;
    }

    public void btEvent(String data) {
        setTitle(data);
    }

    public void onClick(View arg0) {
        if (arg0 == b_call_service) {
            setTitle("Waiting Alarm for 5s");
            /**new一个Intent对象并指定要启动的Activity*/
            Intent intent = new Intent(alarmService.this, AlarmReceiver.class);

            /**PendingIntent.getBroadcast()通过广播来实现闹钟提示，
             * PendingIntent可以说是 Intent的进一步封装，
             * 他既包含了Intent的描述又是Intent行为的执行*/
            /**PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags
             * 第四个参数flags意为标记，初步认为flags是标识各个PendingIntent的，于是在测试中设置了个全局变量*/
            PendingIntent p_intent = PendingIntent.getBroadcast(
                    alarmService.this, 0, intent, 0);

            /**设置按钮等待的时间*/
            /**setTimeInMillis(long) 方法从给定的long值设置日历的当前时间
             * JAVA获取当前系统时间System.currentTimeMillis()
             * calendar.add根据给定的日历字段和对应的时间,来对当前的日历进行操作。(根据日历字段,增加或减去)*/
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 5);

            /**表示使用AlarmManager在规定的时间间隔到了后实现提醒服务，使用的是系统自带的service*/
            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                    p_intent);

            /**AlarmManager的方法中
             * am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),p_intent);
             * 第一个参数表示闹钟类型：当系统进入睡眠状态时，这种类型的闹铃也会唤醒系统。
             * 第二个参数表示闹钟执行时间。
             * 第三个参数表示闹钟响应动作。
             */
        }

        /**退出按钮，点击退出按钮，广播收到会执行*/
        if (arg0 == b_exit_service) {
            Intent intent = new Intent(alarmService.this, AlarmReceiver.class);
            PendingIntent p_intent = PendingIntent.getBroadcast(
                    alarmService.this, 0, intent, 0);

            /**退出*/
            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.cancel(p_intent);
            finish();

        }
    }
}

/**Android中Calendar类的用法总结
 * https://blog.csdn.net/sysukehan/article/details/52045440*/